package com.xiangge.demo;

/**
 * @author xiangge
 * @version 1.0
 * @date 2025/3/18 10:24
 * @description  this关键字
 *         场景： 事物描述类的方法中 包括： 行为和构造方法
 *         描述： this是本类对象的引用
 *             this一般在方法中，哪个对象调用了this所在的方法,this就指向哪个对象
 *
 *         this的使用：
 *             this.属性：直接获取对象中成员变量的值            掌握
 *                 说明：
 *                      省略this: 就近原则 - 先找方法的局部变量 , 局部变量没有找成员变量
 *                      优先级： 局部变量 >> 成员变量
 *             this.行为：
 *                   说明： 方法不能包涵和嵌套，所以没有局部方法 , 只能调用成员方法 , this.一般省略
 *             this调用构造方法：                            掌握
 *                注意： 只能在构造方法的第一行调用本类中其他构造方法
 *                this();    :   调用本类中无参构造
 *                this(实际参数);  : 调用本类中有参构造
 *
 *                优点： 简化构造方法的代码,便于阅读代码以及维护代码
 *
 *
 */
public class OOPDemo3 {
    public static void main(String[] args) {
        Phone phone = new Phone("华为" , 7999);
        phone.show();// 品牌：华为, 价格：7999.0
        /*Phone phone2 = new Phone("小米", 8999);
        phone2.show();*/
    }
}
// 模版
class  Phone{
    // 属性
    public String brand;
    public double price;
    public double num;
    public double sum;
    // 行为
    public void show(){
        String brand = "VIVO";
        System.out.println("品牌：" + this.brand + ", 价格：" + this.price);
        // System.out.println("品牌：" + this.brand + ", 价格：" + this.price);
//        this.call();
        call();
    }
    // 行为 - 成员方法
    public void call(){
        System.out.println("打电话");
    }
    // 无参和满参工作
    public Phone() {
    }
    public Phone(String brand) {
        this.brand = brand;
    }
    public Phone(double price) {
        this.price = price;
    }
    // 构造方法作用： 给对象的属性做显示初始化
    public Phone(String brand, double price) {
        this.brand = brand;
        this.price = price;
    }
    public Phone(String brand, double price, double num, double sum) {
      /*  this.brand = brand;
        this.price = price;*/
        this(brand,price);
        this.num = num;
        this.sum = sum;
    }
}
